package com.company.project.wechat.weChatPay.service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Map;

/**
 * 第三方支付回调接口
 * @author ZYF
 * @date 2021/5/18 11:03
 */
public interface WeChatPayService {

    /**
     * 微信支付接口
     * @param orderId   公司业务订单号
     * @param price     价格
     * @param body      主题信息
     * @param ipAddress 客户端APP IP 地址
     * @return 返回的信息直接发给客户端即可
     * @throws IOException
     */
    Map createOrder(String orderId, BigDecimal price, String body, String ipAddress) throws IOException;


    /**
     * 微信小程序申请退款(需要双向证书) 注：商户订单号，商户退款单号必须二选一
     * @param transactionId 微信支付订单号
     * @param outTradeNo 商户订单号
     * @param outRefundNo 商户退款单号
     * @param totalFee 订单金额
     * @param refundFee 退款金额
     * @param refundDesc 退款原因(可无)
     * @param notifyUrl 退款结果通知url(可无)
     * @return
     * @throws Exception
     */
    String doRefundRequest(String transactionId,String outTradeNo,String outRefundNo,BigDecimal totalFee,BigDecimal refundFee,String refundDesc,String notifyUrl) throws Exception;


    /**
     * 微信小程序交易账单
     * @param billDate
     * @return
     * @throws Exception
     */
    String doDownloadbill(String billDate) throws Exception;

    /**
     * 微信服务器调用该请求，进行数据异步传回作用
     * 微信支付回调
     *
     * @param request
     * @param response
     * @return 一个代表接受成功／失败的 XML 信息（失败原因应该是：签名失败，成功则表示确认收到数据，微信不需要再发数据到服务器）
     * @throws Exception
     */
    String callBack(HttpServletRequest request, HttpServletResponse response) throws Exception;


    /**
     * 微信服务器调用该请求，进行数据异步传回作用
     * 账单退款通知接口回调
     *
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    String wxRequestBack(HttpServletRequest request, HttpServletResponse response) throws Exception;




    }
